잠시만 기다려 주세요

     '대통령을 욕하는 것은 민주사회에서 주권을 가진 시민의 당연한 권리입니다. 대통령을 욕하는 것으로 주권자가 스트레스를 해소할 수 있다면 저는 기쁜 마음으로 들을 수 있습니다. - 노무현 -'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (16)  |  여러가지 팁 (1054)  |  추천 및 재미 (150)  |  자료실 (22)  |  
시사, 이슈, 칼럼, 평론, 비평 (582)  |  끄적거림 (127)  |  문예 창작 (702)  |  바람 따라 (69)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    postgresql

postgresql - postgresql 10 이상 파티셔닝 파티션 partitioning, 설정... 대용량 테이블 데이터 쪼개기, 분리하기...
이 름 : 바다아이   |   조회수 : 9253         짧은 주소 : https://www.bada-ie.com/su/?631591801495
아래는 postgresql 10 이상 버전에서 파티셔닝 방법입니다.
10 부터 파티셔닝 부분이 정말 편해졌습니다. 예전에는 함수 만들어서 트리거 하고 그랬는데 이제 자체로 지원합니다.
대부분 날짜 별로 분류해 놓기 때문에 날짜 기준으로 설명합니다. 날짜가 아니라도 숫자로 해도 됩니다.

파티셔닝이 뭐냐? 물으면 
한 테이블에 들어갈 엄청나게 많은 자료를 조건을 걸어서 여러 테이블로 쪼개서 넣게 만드는 겁니다.
이러면 테이블이 가벼워지겠죠....

만드실 때는 꼭 조건에 맞는 하위 파티션 테이블을 꼭 잘 만들어 놓아야 합니다.
자료를 입력해 보면 알겠지만 조건에 맞는 하위 파티션 테이블이 없으면 에러가 납니다.
있으면 해당 조건에 맞는 하위 파티션 테이블로 들어가고요....

간단히 설명해 놓습니다. 아래 정도만 알아도 응용해서 할 수 있을 겁니다. 
쉽게 말해 핵심은 메인 파티션 테이블 껍데기를 놓고 실제 데이터는 하위 파티션으로 넣게 된다고 보시면 됩니다.
구조는 그렇게 이해하시면 편합니다.

아래처럼 계속 하위 파티션에 또 파티셔닝을 걸고 또 그 하위에 하위를 만드는 것도 가능합니다.
그러나 이건 개인적으로 권하지 않습니다. 

CREATE TABLE aaa_2006 PARTITION OF aaa FOR VALUES FROM ('2006-01-01') TO ('2006-12-31') PARTITION BY RANGE (num);
CREATE TABLE aaa_2006_1 PARTITION OF aaa_2006 FOR VALUES FROM ('1') TO ('100');


주의 : 
기존 테이블을 파티션용 테이블로 전환은 안됩니다... 또한 파티션된 테이블 역시 일반 테이블로 전환되지 않습니다.
다만 필드 조건에 맞는 일반 테이블을 하위 파티션 테이블로 붙일 수는 있습니다.
또한 하위 파티션 테이블을 일반 테이블로 분리는 가능합니다.
참고 해서..... 기존 테이블을 적용하려면... 새로 만들고 복사하는 게 좋겠죠..
그래도 나는 기존 꺼로 하고 싶다 하시는 분들은 예전 함수, 트리거 방식으로 파티셔닝을 구현하셔야 합니다.


파티션 테이블을 만듭니다.

CREATE TABLE aaa (
    num         int not null,
    logdate         date not null
) PARTITION BY RANGE (logdate);


연결 할 하위 파티션 테이블을 생성합니다.

CREATE TABLE aaa_2006 PARTITION OF aaa FOR VALUES FROM ('2006-01-01') TO ('2006-12-31');
CREATE TABLE aaa_2007 PARTITION OF aaa FOR VALUES FROM ('2007-01-01') TO ('2007-12-31');
CREATE TABLE aaa_2008 PARTITION OF aaa FOR VALUES FROM ('2008-01-01') TO ('2008-12-31');


인덱스도 생성합니다.

CREATE INDEX ON aaa_2006 (logdate);
CREATE INDEX ON aaa_2007 (logdate);
CREATE INDEX ON aaa_2008 (logdate);


데이터를 입력해 봅시다. 넣어보면 3개 하위 파티션에 조건에 맞게 들어가 있을 겁니다.

insert into aaa (num, logdate) values ('1', '2006-01-01');
insert into aaa (num, logdate) values ('2', '2007-01-01');
insert into aaa (num, logdate) values ('3', '2008-01-01');


잘 입력 되었나 확인해 보면...

select * from aaa;
 num |  logdate   
-----+------------
   1 | 2006-01-01
   2 | 2007-01-01
   3 | 2008-01-01
(3개 행)

select * from aaa_2006;
 num |  logdate   
-----+------------
   1 | 2006-01-01
(1개 행)

select * from aaa_2007;
 num |  logdate   
-----+------------
   2 | 2007-01-01
(1개 행)

select * from aaa_2008;
 num |  logdate   
-----+------------
   3 | 2008-01-01
(1개 행)



파티션 관련 테이블 삭제시에는.... 

DROP TABLE aaa_2006;


자료를 보존하면서 하위 파티션을 분리 하려면 아래처럼 하세요.... 일반 테이블로 빠지게 됩니다.

ALTER TABLE aaa DETACH PARTITION aaa_2006;


자료를 보존하면서 일반 테이블을 하위 파티션 테이블로 다시 추가 할 때...

ALTER TABLE aaa ATTACH PARTITION aaa_2006 FOR VALUES FROM ('2006-01-01') TO ('2006-12-31');


만약 하위 파티션을 데리고 있는 테이블을 삭제하면 관련 하위 파티션 테이블도 전부 삭제 됩니다. 
!! 주의 하세요 !!

DROP TABLE aaa;

| |





      1 page / 2 page
번 호 카테고리 제 목 이름 조회수
45 postgresql postgresql ... postgresql 14 .. postgresql.conf port 5432 .. 바다아이 673
44 postgresql , count(*) .... 바다아이 6852
43 postgresql How to do an update + join in PostgreSQL?, 바다아이 6083
42 postgresql sequence(퀀) 바다아이 7717
41 postgresql , , , index create, , 바다아이 8098
40 postgresql postgresql log_timezone .... 바다아이 6501
39 postgresql postgresql SEQUENCE reset .... 바다아이 8337
38 postgresql [PostgreSql] WITH , , Operator 바다아이 7730
37 postgresql postgresql for, foreach , 바다아이 9284
36 postgresql postgresql , , into ... 바다아이 9282
35 postgresql postgresql PL/pgSQL - SQL Procedural Language, , 바다아이 10696
34 postgresql postgresql ... .. , , 바다아이 11711
33 postgresql postgresql CSV export/import 바다아이 8515
32 postgresql postgresql tablespace , .... 바다아이 12837
현재글 postgresql postgresql 10 partitioning, ... , ... 바다아이 9254
30 postgresql Using PostgreSQL Arrays, ... ... 바다아이 9221
29 postgresql PostgreSQL (TRIGGER) (function) 바다아이 8983
28 postgresql Optimize and Improve PostgreSQL Performance with VACUUM, ANALYZE, and REINDEX 바다아이 9633
27 postgresql postgresql tuple . vacuumdb .. , . 바다아이 9029
26 postgresql postgresql , .. 바다아이 9225
25 postgresql postgresql , size, 바다아이 11223
24 postgresql postgresql , , .... 바다아이 8271
23 postgresql PostgreSQL Replication, , , master, slave 바다아이 10771
22 postgresql postgresql case 바다아이 8138
21 postgresql postgresql with 바다아이 8575
20 postgresql postgresql , , string 바다아이 11481
19 postgresql Postgresql partitioning table , , , 바다아이 9073
18 postgresql PostgreSQL 바다아이 10561
17 postgresql postgresql vacuumdb, psql, pg_dump password crontab , pgpass 바다아이 10246
16 postgresql postgresql sequence 퀀 auto_increment . 바다아이 9665
| |









Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천  실행시간 : 0.0587
to webmaster... gogo sea. gogo sea.